import Vue from 'vue';
import Vuex from './myVuex' //修改代码

Vue.use(Vuex);

/**
 * 四、分析Vue.use
 * 
 * Vue.use(plugin);
 * 参数    {Object | Function} plugin
 * 用法    安装Vue.js插件，如果插件是一个对象，必须提供install方法。如果插件是一个函数，他会被用作install方法。
 *         install方法被同一个插件多次调用时，插件也只会被安装一次
 * 作用    插件的类型，可以是install方法，也可以是一个包含install方法的对象
 *         插件只能被安装一次，保证插件列表中不能有重复的插件
 * 实现
 * 
 Vue.use = function(plugin){
  const installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
  if(installedPlugins.indexOf(plugin)>-1){
    return this;
  }
  <!-- 其他参数 -->
  const args = toArray(arguments,1);
  args.unshift(this);
  if(typeof plugin.install === 'function'){
    plugin.install.apply(plugin,args);
  }else if(typeof plugin === 'function'){
    plugin.apply(null,args);
  }
  installedPlugins.push(plugin);
  return this;
}

 * 
 * }
 * 
*/

export default new Vuex.Store({
  state: {
    num: 0
  },
  // 新增测试代码
  getter: {
    getNum: (state) => {
      return state.num
    }
  },
  mutations: {
    incre(state, arg) {
      state.num += arg
    },
    subtraction(state, arg) {
      state.num -= arg
    },
  },
  actions: {
    // 这边 commit 是通过解构获得的，this的指向可能会丢失，如果示例
    asyncIncre({ commit }, arg) {
      setTimeout(() => {
        commit('incre', arg)
      }, 1000)
    }
  },
  modules: {
  }
})
